package com.hjb.service.impl.user;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.hjb.service.domain.siteuser.SiteUserLimit;
import com.hjb.service.domain.siteuser.SiteUserLimitExample;
import com.hjb.service.mapper.SiteUserLimitMapper;
import com.hjb.service.product.ProductService;
import com.hjb.service.user.SiteUserLimitService;
import com.hjb.service.utils.HJBUT;

@Service
public class SiteUserLimitServiceImpl implements SiteUserLimitService {

	private Logger log = LoggerFactory.getLogger(SiteUserLimitServiceImpl.class);
	
	@Autowired
	private ProductService productService;
	
	@Autowired
	private SiteUserLimitMapper siteUserLimitMapper;

	@Override
	public List<SiteUserLimit> selectByExample(SiteUserLimitExample example) {
		return siteUserLimitMapper.selectByExample(example);
	}

	@Override
	public int insertSiteUserLimit(SiteUserLimit siteUserLimit) {
		return siteUserLimitMapper.insertSelective(siteUserLimit);
	}

	@Override
	public void updateSiteUserLimit(SiteUserLimit siteUserLimit) {
		siteUserLimitMapper.updateByPrimaryKeySelective(siteUserLimit);
	}

	@Override
	public void userLimitFeeReset() {
		try {
			log.info("用户提现限额信息 手续费次数 重置开始 ：....................."+HJBUT.currentTime());
			
			Map<String,Object> params = new HashMap<String, Object>();
			params.put("type", "0");
			List<Map<String, Object>> product = productService.getProductList(params);
			if(product.size() <1){
				log.info("用户提现限额信息 手续费次数 重置异常：未查询到产品信息....................."+HJBUT.currentTime());
				return;
			}
			Map<String, Object> productMap = product.get(0);
			if(productMap.get("maxNumber")!=null){
				int feeNum = Integer.parseInt(String.valueOf(productMap.get("maxNumber")));
				int res = siteUserLimitMapper.updateUserLimitFeeNum(feeNum);
				log.info("提现限额信息 手续费免费次数更新结果："+res);
			}
			
			log.info("用户提现限额信息 手续费次数 重置结束：....................."+HJBUT.currentTime());
		} catch (Exception e) {
			log.info("用户提现限额信息 手续费次数 重置异常 ：....................."+HJBUT.currentTime()+e.getMessage());
		}
	}

	@Override
	public void userLimitDayReset() {
		try {
			log.info("用户提现限额信息 日限额 重置开始 ：....................."+HJBUT.currentTime());
			
			Map<String,Object> params = new HashMap<String, Object>();
			params.put("type", "0");
			List<Map<String, Object>> product = productService.getProductList(params);
			if(product.size() <1){
				log.info("用户提现限额信息 日限额  重置异常：未查询到产品信息....................."+HJBUT.currentTime());
				return;
			}
			Map<String, Object> productMap = product.get(0);
			if(productMap.get("maxDaily")!=null){
				BigDecimal maxDaily = new BigDecimal(String.valueOf(productMap.get("maxDaily")));
				int res = siteUserLimitMapper.updateUserLimitByDay(maxDaily);
				log.info("提现限额信息 日限额更新结果："+res);
			}
			
			log.info("用户提现限额信息 日限额 重置结束：....................."+HJBUT.currentTime());
		} catch (Exception e) {
			log.info("用户提现限额信息 日限额 重置异常 ：....................."+HJBUT.currentTime()+e.getMessage());
		}
		
	}

	@Override
	public void userLimitMonthReset() {
		try {
			log.info("用户提现限额信息 月限额  重置开始 ：....................."+HJBUT.currentTime());
			
			Map<String,Object> params = new HashMap<String, Object>();
			params.put("type", "0");
			List<Map<String, Object>> product = productService.getProductList(params);
			if(product.size() <1){
				log.info("用户提现限额信息 月限额  重置异常：未查询到产品信息....................."+HJBUT.currentTime());
				return;
			}
			Map<String, Object> productMap = product.get(0);
			if(productMap.get("maxMonthly")!=null){
				BigDecimal maxMonthly = new BigDecimal(String.valueOf(productMap.get("maxMonthly")));
				int res = siteUserLimitMapper.updateUserLimitByMonth(maxMonthly);
				log.info("提现限额信息 月限额   更新结果："+res);
			}
			
			log.info("用户提现限额信息 月限额   重置结束：....................."+HJBUT.currentTime());
		} catch (Exception e) {
			log.info("用户提现限额信息 月限额 重置异常 ：....................."+HJBUT.currentTime()+e.getMessage());
		}
		
	}

}
